package script2
{
	import flash.utils.Dictionary;

	/**
	 * 词法标识符
	 * @author blank
	 * 
	 */
	public class Token
	{
		/**
		 * 关键字列表
		 */
		private static const KEY_WORD_DIC:Dictionary=new Dictionary();
		
		//初始化关键字列表
		{
			KEY_WORD_DIC["as"]=true;
			KEY_WORD_DIC["is"]=true;
			KEY_WORD_DIC["instanceof"]=true;
			KEY_WORD_DIC["extends"]=true;
			KEY_WORD_DIC["in"]=true;
			KEY_WORD_DIC["package"]=true;
			KEY_WORD_DIC["for"]=true;
			KEY_WORD_DIC["var"]=true;
			KEY_WORD_DIC["new"]=true;
			KEY_WORD_DIC["class"]=true;
			KEY_WORD_DIC["function"]=true;
			KEY_WORD_DIC["if"]=true;
			KEY_WORD_DIC["else"]=true;
			KEY_WORD_DIC["while"]=true;
			KEY_WORD_DIC["return"]=true;
			KEY_WORD_DIC["import"]=true;
			KEY_WORD_DIC["public"]=true;
			KEY_WORD_DIC["private"]=true;
			KEY_WORD_DIC["protected"]=true;
			KEY_WORD_DIC["switch"]=true;
			KEY_WORD_DIC["case"]=true;
			KEY_WORD_DIC["break"]=true;
			KEY_WORD_DIC["continue"]=true;
			KEY_WORD_DIC["default"]=true;
			KEY_WORD_DIC["try"]=true;
			KEY_WORD_DIC["catch"]=true;
			KEY_WORD_DIC["finally"]=true;
			KEY_WORD_DIC["each"]=true;
		}
		
		/**
		 * 标识符
		 */
		public static var IDENT:int=1;
		
		/**
		 * 常量
		 */
		public static var CONSTANT:int=2;
		
		/**
		 * 赋值运算符
		 */
		public static var ASSIGN:int=3;
		
		/**
		 * 数学运算符
		 */
		public static var MOP:int=4;
		
		/**
		 * 逻辑运算符
		 */
		public static var LOP:int=5;
		
		/**
		 * 比较运算符
		 */
		public static var COP:int=6;
		
		/**
		 * 递增操作运算符
		 */
		public static var INCREMENT:int=7;
		
		/**
		 * 单元逻辑运算符
		 */
		public static var LOPNot:int=40;
		
		/**
		 * 关键字
		 */
		public static var keyclass:int=10;
		
		/**
		 * 关键字
		 */
		public static var keyimport:int=11;
		
		/**
		 * 关键字-函数声明
		 */
		public static var keyfunction:int=12;
		
		/**
		 * 关键字-if
		 */
		public static var keyif:int=13;
		
		/**
		 * 关键字
		 */
		public static var keyelse:int=14;
		
		/**
		 * 
		 */
		public static var keyfor:int=15;
		
		/**
		 * 
		 */
		public static var keywhile:int=16;
		
		/**
		 * 关键字-变量声明
		 */
		public static var keyvar:int=17;
		
		/**
		 * 
		 */
		public static var keyreturn:int=18;
		
		/**
		 * 
		 */
		public static var keynew:int=19;
		
		/**
		 * 
		 */
		public static var keyextends:int=20;
		
		/**
		 * 
		 */
		public static var keypackage:int=42;
		
		/**
		 * 关键字
		 */
		public static var keypublic:int=44;
		/**
		 * 
		 */
		public static var keyprivate:int=45;
		/**
		 * 
		 */
		public static var keyprotected:int=46;
		/**
		 * 
		 */
		public static var keyswitch:int=47;
		/**
		 * 
		 */
		public static var keycase:int=48;
		/**
		 * 
		 */
		public static var keybreak:int=49;
		/**
		 * 
		 */
		public static var keydefault:int=50;
		/**
		 * 
		 */
		public static var keycontinue:int=51;
		/**
		 * 
		 */
		public static var keytry:int=52;
		/**
		 * 
		 */
		public static var keycatch:int=53;
		/**
		 * 
		 */
		public static var keyfinally:int=54;
		/**
		 * 
		 */
		public static var keyeach:int=55;
		
		/**
		 * 左大括号
		 */
		public static var L_BRACE:int=21;
		
		/**
		 * 右大括号
		 */
		public static var R_BRACE:int=22;
		
		/**
		 * 左小括号
		 */
		public static var L_PARENT:int=23;
		
		/**
		 * 右小括号
		 */
		public static var R_PARENT:int=24;
		
		/**
		 * 点号
		 */
		public static var DOT:int=25;
		
		/**
		 * 逗号
		 */
		public static var COMMA:int=26;
		
		/**
		 * 分号
		 */
		public static var SEMICOLON:int=27;
		
		/**
		 * null
		 */
		public static var NULL:int=29;
		
		/**
		 * 左方括号
		 */
		public static var LBRACKET:int=30;
		
		/**
		 * 右方括号
		 */
		public static var RBRACKET:int=31;
		
		/**
		 * 冒号
		 */
		public static var Colon:int=32;
		
		/**
		 * 类型
		 */
		public var type:int;
		
		public var word:String;
		
		public var value:String;
		
		/**
		 * 当前词法标识符所在的行索引
		 */
		internal var lineIndex:int;
		
		/**
		 * 当前词法标识符所在的行的文本
		 */
		internal var lineText:String;
		
		/**
		 * 是否为关键字
		 * @param word
		 * @return 
		 * 
		 */
		public static function isKeyWord(word:String):Boolean{
			return word in KEY_WORD_DIC;
		}
		
		/**
		 * 词法标识符
		 * 
		 */
		public function Token(){
		}
	}
}